<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 用户 模型
 *
 * 用户基础（用户主表）     模型 user_model
 * 用户数据（用户扩展表一） 模型 user_data_model
 * 用户信息（用户扩展表二） 模型 user_info_model
 */
class User_model extends MY_Model {

    const FETCH_MAIN = 1; //获取用户基本信息，比如帐号、邮箱
    const FETCH_DATA = 2; //获取用户数据，比如积分、发帖数等论坛统计信息
    const FETCH_INFO = 4; //获取用户基本资料
    const FETCH_ALL  = 7; //获取用户全部资料

    const STATUS_UNCHECK    = 1; //未验证用户
    const STATUS_UNACTIVE   = 2; //未激活用户
    const STATUS_BAN_AVATAR = 3; //用户被禁止头像
    const STATUS_BAN_SIGN   = 4; //用户被禁止签名

    const STATUS_ALLOW_LOGIN_ADMIN = 5; //该用户是否后后台权限
    const STATUS_SIGN_USEUBB       = 6; //该用户签名是否使用UBB

    protected $_table      = 'user';
    protected $primary_key = 'uid';
    protected $return_type = 'array';

    public $belongs_to = array('user_data' => array('primary_key' => 'uid', 'model' => 'user_data_model'), 'user_info' => array('primary_key' => 'uid', 'model' => 'user_info_model'));

    public function __construct() {
        parent::__construct();

        log_message('debug', 'User_model Model Class Initialized');
    }

    /**
     * 根据用户ID获得用户数据信息
     *
     * @param int $uid 用户ID
     * @param int $type 获得信息的类型
     * @return array
     */
    public function get_by_uid($uid, $type = self::FETCH_MAIN) {
        if (empty($uid)) return array();
        $this->_fetch($type);
        return $this->db->where('user.uid', $uid)->get()->row_array();
    }

    /**
     * 根据用户名字获得用户数据信息
     *
     * @param string $username 用户名
     * @param int $type 获得信息的类型
     * @return array
     */
    public function get_by_name($username, $type = self::FETCH_MAIN) {
        if (empty($username)) return array();
        $this->_fetch($type);
        return $this->db->where('user.username', $username)->get()->row_array();
    }

    /**
     * 通过邮箱获取用户信息
     *
     * @param string $email 邮箱
     * @param int $type 用户信息类型
     * @return array
     */
    public function get_by_email($email, $type = self::FETCH_MAIN) {
        if (empty($email)) return array();
        $this->_fetch($type);
        return $this->db->where('user.email', $email)->get()->row_array();
    }

    /**
     * 跟据用户ID列表获取用户列表
     *
     * @param array $uids 用户ID列表
     * @param int $type
     * @return array
     */
    public function get_many_by_uid($uids, $type = self::FETCH_MAIN) {
        if (empty($uids) || !is_array($uids)) return array();
        $this->_fetch($type);
        $query = $this->db->where_in('user.uid', $uids)->get();
        $result = array();
        foreach ($query->result_array() as $row) {
            $result[$row[$this->primary_key]] = $row;
        }
        return $result;
    }

    /**
     * 跟据用户名列表获取用户列表
     *
     * @param array $names 用户名列表
     * @param int $type
     * @return array
     */
    public function get_many_by_name($names, $type = PwUser::FETCH_MAIN) {
        if (empty($names) || !is_array($names)) return array();
        $this->_fetch($type);
        $query = $this->db->where_in('user.username', $names)->get();
        $result = array();
        foreach ($query->result_array() as $row) {
            $result[$row[$this->primary_key]] = $row;
        }
        return $result;
    }

    /**
     * 添加用户
     *
     */
    public function insert() {

    }

    /**
     * 编辑用户
     *
     */
    public function update() {

    }

    /**
     * 删除用户信息
     *
     */
    public function delete() {

    }

    /**
     * 根据用户ID列表批量删除用户信息
     *
     */
    public function delete_many() {

    }

    /**
     * 设置多表查询关系
     *
     * @param int $type
     */
    public function _fetch($type) {
        $fetch = array();
        $fetch[self::FETCH_MAIN] = 'user';
        $fetch[self::FETCH_DATA] = 'user_data';
        $fetch[self::FETCH_INFO] = 'user_info';

        if (isset($fetch[$type])) {
            $this->db->from($fetch[$type]);
        } else {
            $from = true;
            foreach ($fetch as $key => $table) {
                if ($type & $key) {
                    if ($from) {
                        $this->db->from($fetch[$key]);
                        $from = false;
                    } else {
                        $this->db->join($fetch[$key], "{$this->_table}.{$this->primary_key} = {$table}.{$this->primary_key}", 'left');
                    }
                }
            }
        }
    }
}

/* End of file user_model.php */
/* Location: ./application/models/user_model.php */
